# -*- coding: utf-8 -*-
# Create time: 2020-03-12 11:49
# Author:Rongzhikai

# from lib.global_vars import GlobalVariables
from libs.global_vars import gvar
from conf.settings import PATTERN
import re
import jsonpath
import json
import ast


def convert_parameter(parameter):
    if parameter is None:
        return None
    # 正则表达式提取要替换的关键字
    lists = re.findall(PATTERN, str(parameter))
    # 判断是否为字典类型的参数
    if isinstance(parameter, dict):
        for li in lists:
            li_value = gvar.getVar(li)  # 对应从全局变量中提取值
            parameter = str(parameter).replace('*<%s>' % li, str(li_value))  # 将变量替换字符
        return ast.literal_eval(parameter) if lists else parameter  # 如果没有变量替换返回原字典，有则替换变量后处理同样返回字典
    # 处理替换的是字符串类型的参数
    else:
        for li in lists:
            li_value = gvar.getVar(li)  # 对应从全局变量中提取值
            parameter = parameter.replace('*<%s>' % li, str(li_value))  # 将变量替换字符
        if parameter.strip().startswith('{'):
            parameter = ast.literal_eval(parameter)
        return parameter


def assert_res(assertRes=None, res=None):
    """
    断言结果
    注意：去查询实际值的时候，有false和true的布尔值，在Python中识别都会是False和True
    """
    status = 'PASS'
    # 没有断言部分，直接给PASS
    if assertRes is None:
        return status

    for asrt in str(assertRes).split(';'):
        asrt = asrt.strip()
        act_value = asrt[:asrt.rfind('=')]
        act_value = jsonpath.jsonpath(json.loads(res), act_value)[0]  # 实际值
        expect = asrt[asrt.rfind('=') + 1:]  # 预期值
        if expect not in str(act_value):
            status = 'FAIL'
            return status
    return status


def prefilelist(files):
    """
    组织需要发送的文件，支持多个文件上传，返回文件列表。
    :param files: 测试用例中的参数，输入规则为  name,文件路径;name,文件路径...
    :return: 一个文件列表
    """
    if files:
        file_list = str(files).split(';')
        prefiles = []
        for file in file_list:
            uploadname = file[:file.find(',')]
            filename = file[file.find(',') + 1:]
            tuple_tmp = (uploadname, open(filename, 'rb'))
            prefiles.append(tuple_tmp)
        return prefiles
    else:
        return None

# files = 'filename,C:/Users/Administrator/Desktop/电子件待传/文件/持铁路建设促进土地综合开发若干措施的通知.doc;filename1,C:/Users/Administrator/Desktop/电子件待传/文件/持铁路建设促进土地综合开发若干措施的通知.doc'
# prefiles = prefilelist(None)
# print(prefiles)
#
# import requests
#
# print(requests.post(url='https://www.baidu.com', files=prefiles).status_code)
# print('发送文件....')

# data = {
#     "json": "{'Us_id': '*<tt>', 'Us_account': '*<tt>', 'Us_name': 'aaaaaaa', 'Us_type': '2', 'Us_status': true, 'Us_ApproveFlag': false, 'Us_remark': '', 'UnitID': '128', 'Unit_name': '大龙rong区域', 'Us_Password': '111'}"}
# url = 'http://*<ip>:10088/UserManage/*<temp>'
# print(convert_parameter({"json": "{'Us_id': '', 'Us_account': 'aaa', 'Us_name': 'aaaaaaa', 'Us_type': '2', 'Us_status': true, 'Us_ApproveFlag': false, 'Us_remark': '', 'UnitID': '128', 'Unit_name': '大龙rong区域', 'Us_Password': '111'}"}))
# res = '{"Success":false,"Message":"用户名已存在"}'
# asrt = '$.Success=false;$.Message=用户名已存在'
# print(assert_res(asrt, res))
